package com.bit.cfdi.web.domain;

import static javax.persistence.GenerationType.IDENTITY;

import java.io.Serializable;
import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.persistence.Version;

@Entity
@Table(name = "direccion")
public class Direccion implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 5081544047117002549L;
	
	//Constants
	public static final String CALLE = "calle";
	public static final String NO_EXT = "noExterior";
	public static final String NO_INT = "noInteriro";
	public static final String COLONIA = "colonia";
	public static final String LOCALIDAD = "localidad";
	public static final String REFERENCIA = "referencia";
	public static final String MUNICIPIO = "municipio";
	public static final String CIUDAD = "ciudad";
	public static final String PAIS = "pais";
	public static final String CP = "codigoPostal";
	public static final String ESTADO = "estado";

	// Fields
	private Long idDireccion;
	private String calle;
	private String noExterior;
	private String noInterior;
	private String colonia;
	private String localidad;
	private String referencia;
	private String municipio;
	private String ciudad;
	private String pais;
	private String codigoPostal;
	private String estado;
	private Long ultimaModificacionPor;
	private Calendar fechaModificacion;

	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id_direccion", nullable = false)
	public Long getIdDireccion() {
		return this.idDireccion;
	}

	public void setIdDireccion(final Long idDireccion) {
		this.idDireccion = idDireccion;
	}

	@Column(name = "calle", length = 255)
	public String getCalle() {
		return this.calle;
	}

	public void setCalle(final String calle) {
		this.calle = calle;
	}

	@Column(name = "no_exterior", length = 100)
	public String getNoExterior() {
		return this.noExterior;
	}

	public void setNoExterior(final String noExterior) {
		this.noExterior = noExterior;
	}

	@Column(name = "no_interior", length = 100)
	public String getNoInterior() {
		return this.noInterior;
	}

	public void setNoInterior(final String noInterior) {
		this.noInterior = noInterior;
	}

	@Column(name = "colonia", length = 255)
	public String getColonia() {
		return this.colonia;
	}

	public void setColonia(final String colonia) {
		this.colonia = colonia;
	}

	@Column(name = "localidad", length = 255)
	public String getLocalidad() {
		return this.localidad;
	}

	public void setLocalidad(final String localidad) {
		this.localidad = localidad;
	}

	@Column(name = "referencia", length = 255)
	public String getReferencia() {
		return this.referencia;
	}

	public void setReferencia(final String referencia) {
		this.referencia = referencia;
	}

	@Column(name = "municipio", length = 255)
	public String getMunicipio() {
		return this.municipio;
	}

	public void setMunicipio(final String municipio) {
		this.municipio = municipio;
	}
	
	@Column(name = "ciudad", length = 255)
	public String getCiudad() {
		return this.ciudad;
	}

	public void setCiudad(final String ciudad) {
		this.ciudad = ciudad;
	}

	@Column(name = "pais", length = 255)
	public String getPais() {
		return this.pais;
	}

	public void setPais(final String pais) {
		this.pais = pais;
	}

	@Column(name = "codigo_postal", length = 50)
	public String getCodigoPostal() {
		return this.codigoPostal;
	}

	public void setCodigoPostal(final String codigoPostal) {
		this.codigoPostal = codigoPostal;
	}

	@Column(name = "estado", length = 255)
	public String getEstado() {
		return this.estado;
	}

	public void setEstado(final String estado) {
		this.estado = estado;
	}

	@Column(name = "ultima_modificacion_por")
	public Long getUltimaModificacionPor() {
		return this.ultimaModificacionPor;
	}

	public void setUltimaModificacionPor(final Long ultimaModificacionPor) {
		this.ultimaModificacionPor = ultimaModificacionPor;
	}

	@Column(name = "fecha_modificacion")
	@Temporal(TemporalType.TIMESTAMP)
	@Version
	public Calendar getFechaModificacion() {
		return this.fechaModificacion;
	}

	public void setFechaModificacion(final Calendar fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}
	
	@Transient
	public String getFullAddress() {
		String fullAddress = "";
		fullAddress +=  getCalle() != null ? getCalle() + " " :  "";
		fullAddress +=  getNoExterior() != null ?  getNoExterior() + " " : "";
		fullAddress +=  getNoInterior() != null ? getNoInterior() + " " : "";
		fullAddress +=  getColonia() != null ? getColonia() + " " : "";
		fullAddress +=  getLocalidad() != null ? getLocalidad() + " " : "";
		fullAddress +=  getReferencia() != null ? getReferencia() : " " + " ";
		fullAddress +=  getMunicipio() != null ? getMunicipio() + " " : "" ;
		fullAddress +=  getCiudad() != null ? getCiudad() + " " : "";
		fullAddress +=  getPais() != null ? getPais() + " " : "";
		fullAddress +=  getCodigoPostal() != null ? getCodigoPostal() + " " : "";
		fullAddress +=  getEstado() != null ? getEstado() + " " : "";
		return fullAddress;
	}

}